获取股票交易数据
一、获取前的准备
安装Python,这个不再赘述,Python官网下载安装适合自己计算机的版本。
安装pandas,我是直接安装的Anaconda,包含有pandas,很实用,建议安装Anaconda,下载地址:https://www.anaconda.com/download/ ,选择适合的版本安装。
Tushare的下载安装,下载地址:https://pypi.python.org/pypi/tushare ,下载完之后解压即可,无需安装。
二、获取数据
code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
start:开始日期,格式YYYY-MM-DD
end:结束日期,格式YYYY-MM-DD
ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
retry_count:当网络异常后重试次数,默认为3
pause:重试时停顿秒数,默认为0
返回值说明:
date:日期
open:开盘价
high:最高价
close:收盘价
low:最低价
volume:成交量
price_change:价格变动
p_change:涨跌幅
ma5:5日均价
ma10:10日均价
ma20:20日均价
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:换手率[注:指数无此项]
import tushare as ts
data=ts.get_hist_data('300274')
print(data)
View Code
获取某一时间段的历史数据
import tushare as ts
data=ts.get_hist_data('300274',start='2017-01-01',end='2018-03-27')
print(data)
执行结果:
View Code
另外一个获取历史数据的函数get_h_data()。
import tushare as ts
data=ts.get_h_data('300274')
print(data)
View Code
在不指定开始时间和结束时间时,该函数默认返回最近一年的日线数据,返回的数据与get_hist_data不同的是,该函数只返回开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、成交金额(amount)六列 ,同样加上时间段也可以获取相应数据。
第三个获取历史数据的函数get_k_data()。
import tushare as ts
data=ts.get_k_data('300274')
print(data)
View Code
左右滑动查看更多
ts.get_hist_data('600848', ktype='W') #获取周k线数据
ts.get_hist_data('600848', ktype='M') #获取月k线数据
ts.get_hist_data('600848', ktype='5') #获取5分钟k线数据
ts.get_hist_data('600848', ktype='15') #获取15分钟k线数据
ts.get_hist_data('600848', ktype='30') #获取30分钟k线数据
ts.get_hist_data('600848', ktype='60') #获取60分钟k线数据
ts.get_hist_data('sh')#获取上证指数k线数据,其它参数与个股一致,下同
ts.get_hist_data('sz')#获取深圳成指k线数据
ts.get_hist_data('hs300')#获取沪深300指数k线数据
ts.get_hist_data('sz50')#获取上证50指数k线数据
ts.get_hist_data('zxb')#获取中小板指数k线数据
ts.get_hist_data('cyb')#获取创业板指数k线数据
2、获取实时行情数据get_today_all()
返回值说明:
code:代码
name:名称
changepercent:涨跌幅
trade:现价
open:开盘价
high:最高价
low:最低价
settlement:昨日收盘价
volume:成交量
turnoverratio:换手率
amount:成交量
per:市盈率
pb:市净率
mktcap:总市值
nmc:流通市值
import tushare as ts
ts.get_today_all()
View Code
左右滑动查看更多
3、获取历史分笔数据之:get_tick_data()
获取个股以往交易历史的分笔数据明细,通过分析分笔数据,可以大致判断资金的进出情况。在使用过程中,对于获取股票某一阶段的历史分笔数据,需要通过加入交易日参数并append到一个DataFrame或者直接append到本地同一个文件里。历史分笔接口只能获取当前交易日之前的数据,当日分笔历史数据请调用get_today_ticks()接口或者在当日18点后通过本接口获取。
参数说明:
code:股票代码,即6位数字代码
date:日期,格式YYYY-MM-DD
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
import tushare as ts
df=ts.get_tick_data('300274',date='2018-03-27')
df.head(10) #距离执行时间最近的十笔交易
time price change volume amount type
0 15:00:03 18.46 -- 2373 4380761 卖盘
1 14:57:03 18.46 -0.01 188 347048 卖盘
2 14:57:00 18.47 -0.01 42 77574 卖盘
3 14:56:57 18.48 -- 644 1190112 买盘
4 14:56:54 18.48 0.01 80 147840 买盘
5 14:56:51 18.47 0.01 9 16623 中性盘
6 14:56:48 18.46 -0.02 38 70148 卖盘
7 14:56:45 18.48 0.01 25 46200 买盘
8 14:56:42 18.47 -- 87 160689 买盘
9 14:56:36 18.47 -- 82 151454 买盘
获取当前交易日(交易进行中使用)已经产生的分笔明细数据。
参数说明:
code:股票代码,即6位数字代码
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
time:时间
price:当前价格
pchange:涨跌幅
change:价格变动
volume:成交手
amount:成交金额(元)
type:买卖类型【买盘、卖盘、中性盘】
使用方法:
import tushare as ts
df = ts.get_today_ticks('300274') #当日的历史分笔数据
df.head(10) #距离执行时间最近的10笔
执行结果:
[Getting data:]###########################################Out[6]:
time price pchange change volume amount type
0 13:32:15 18.68 +1.19 -0.01 1 1868 买盘
1 13:32:12 18.69 +1.25 0.00 8 14952 买盘
2 13:32:06 18.69 +1.25 0.01 1 1869 买盘
3 13:32:03 18.68 +1.19 0.00 19 35492 卖盘
4 13:31:51 18.68 +1.19 0.00 8 14944 买盘
5 13:31:48 18.68 +1.19 0.01 14 26152 买盘
6 13:31:45 18.67 +1.14 -0.01 30 56010 卖盘
7 13:31:42 18.68 +1.19 0.01 8 14944 买盘
8 13:31:36 18.67 +1.14 0.00 14 26138 卖盘
9 13:31:33 18.67 +1.14 -0.01 10 18670 卖盘
symbols:6位数字股票代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板) 可输入的类型:str、list、set或者pandas的Series对象
0:name,股票名字
1:open,今日开盘价
2:pre_close,昨日收盘价
3:price,当前价格
4:high,今日最高价
5:low,今日最低价
6:bid,竞买价,即“买一”报价
7:ask,竞卖价,即“卖一”报价
8:volume,成交量 maybe you need do volume/100
9:amount,成交金额(元 CNY)
10:b1_v,委买一(笔数 bid volume)
11:b1_p,委买一(价格 bid price)
12:b2_v,“买二”
13:b2_p,“买二”
14:b3_v,“买三”
15:b3_p,“买三”
16:b4_v,“买四”
17:b4_p,“买四”
18:b5_v,“买五”
19:b5_p,“买五”
20:a1_v,委卖一(笔数 ask volume)
21:a1_p,委卖一(价格 ask price)
...
30:date,日期;
31:time,时间;
使用方法:
import tushare as ts
df = ts.get_realtime_quotes('300274') #单个股票实时行情
df[['code','name','price','bid','ask','volume','amount','time']] #需要显示的属性
code name price bid ask volume amount time
0 300274 阳光电源 18.780 18.750 18.770 17003279 318581216.230 13:16:06
import tushare as ts
df = ts.get_realtime_quotes(['600460','000762','000725'])
df[['code','name','price','bid','ask','volume','amount','time']]
获取实时指数:
ts.get_realtime_quotes('sh') #上证指数
ts.get_realtime_quotes(['sh','sz','hs300','sz50','zxb','cyb']) #上证指数 深圳成指 沪深300指数 上证50 中小板 创业板
ts.get_realtime_quotes(['sh','600848']) #或者混搭
左右滑动查看更多
code:指数代码
name:指数名称
change:涨跌幅
open:开盘点位
preclose:昨日收盘点位
close:收盘点位
high:最高点位
low:最低点位
volume:成交量(手)
amount:成交金额(亿元)
import tushare as ts
df = ts.get_index()
print(df)
执行结果:
View Code
左右滑动查看更多
code:股票代码,即6位数字代码
date:日期,格式YYYY-MM-DD
vol:手数,默认为400手,输入数值型参数
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
code:代码
name:名称
time:时间
price:当前价格
volume:成交手
preprice :上一笔价格
type:买卖类型【买盘、卖盘、中性盘】
import tushare as ts
df = ts.get_sina_dd('300274', date='2018-03-28') #默认400手
#df = ts.get_sina_dd('300274', date='2018-03-28', vol=500) #指定大于等于500手的数据
print(df)
执行结果:
View Code
左右滑动查看更多
path_or_buf: csv文件存放路径或者StringIO对象
sep : 文件内容分隔符,默认为,逗号
na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符
float_format: float类型的格式
columns: 需要保存的列,默认为None
header: 是否保存columns名,默认为True
index: 是否保存index,默认为True
mode : 创建新文件还是追加到现有文件,默认为新建
encoding: 文件编码格式
date_format: 日期格式
import tushare as ts
df = ts.get_hist_data('300274')
#直接保存
df.to_csv('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.csv')
#选择保存
#df.to_csv('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.csv',columns=['open','high','low','close'])
左右滑动查看更多
追加数据的方式:
某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下:
import tushare as ts
import os
filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
df = ts.get_hist_data(code)
if os.path.exists(filename):
df.to_csv(filename, mode='a', header=None)
else:
df.to_csv(filename)
【注:如果是不考虑header,直接df.to_csv(filename, mode=’a’)即可,否则,每次循环都会把columns名称也append进去】
保存为Excel格式文件
pandas将数据保存为MicroSoft Excel文件格式。
excel_writer: 文件路径或者ExcelWriter对象
sheet_name:sheet名称,默认为Sheet1
sep : 文件内容分隔符,默认为,逗号
na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符
float_format: float类型的格式
columns: 需要保存的列,默认为None
header: 是否保存columns名,默认为True
index: 是否保存index,默认为True
encoding: 文件编码格式
startrow: 在数据的头部留出startrow行空行
startcol :在数据的左边留出startcol列空列
import tushare as ts
df = ts.get_hist_data('300274')
#直接保存
df.to_excel('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.xlsx')
#设定数据位置(从第3行,第6列开始插入数据)
#df.to_excel('C:/Users/07010018/Desktop/tushare-1.1.6/exportdata/300274.xlsx', startrow=2,startcol=5)
左右滑动查看更多
name:表名,pandas会自动创建表结构
con:数据库连接,最好是用sqlalchemy创建engine的方式来替代con
flavor:数据库类型 {‘sqlite’, ‘mysql’}, 默认‘sqlite’,如果是engine此项可忽略
schema:指定数据库的schema,默认即可
if_exists:如果表名已存在的处理方式 {‘fail’, ‘replace’, ‘append’},默认‘fail’
index:将pandas的Index作为一列存入数据库,默认是True
index_label:Index的列名
chunksize:分批存入数据库,默认是None,即一次性全部写人数据库
dtype:设定columns在数据库里的数据类型,默认是None
from sqlalchemy import create_engine
import tushare as ts
df = ts.get_tick_data('300274', date='2018-03-27')
engine = create_engine('mysql://user:passwd@127.0.0.1/db_name?charset=utf8')
#存入数据库
df.to_sql('tick_data',engine)
#追加数据到现有表
#df.to_sql('tick_data',engine,if_exists='append')
另外,数据也可以保存为HDF5格式,JSON格式,存入NoSQL数据库,这里就不在一一赘述,就简单介绍几种常用的。
所有内容,仅作参考,可能有不足或错误之处,欢迎留言批评指正